package com.foftact.etfposi;

import java.util.List;

/**
 * ETF持仓明细服务接口
 * 定义ETF持仓相关的业务方法
 */
public interface ETFPosiationService {
    /**
     * 从API抓取并保存ETF持仓数据
     * @param fundCode 基金代码
     * @return 成功保存的记录数
     */
    int fetchAndSaveETFPosiationData(String fundCode);

    /**
     * 根据基金代码、年份和季度获取持仓数据
     * @param fundCode 基金代码
     * @param reportYear 报告年份
     * @param reportQuarter 报告季度
     * @return 持仓数据列表
     */
    List<ETFPosiation> getETFPosiationByFundCodeAndReportPeriod(String fundCode, Integer reportYear, Integer reportQuarter);

    /**
     * 获取指定基金近2年的持仓数据
     * @param fundCode 基金代码
     * @return 持仓数据列表
     */
    List<ETFPosiation> getRecentTwoYearsETFPosiationByFundCode(String fundCode);

    /**
     * 保存单个ETF持仓数据
     * @param etfPosiation ETF持仓数据对象
     * @return 保存是否成功
     */
    boolean saveETFPosiation(ETFPosiation etfPosiation);

    /**
     * 批量保存ETF持仓数据
     * @param etfPosiationList ETF持仓数据列表
     * @return 保存的记录数
     */
    int batchSaveETFPosiation(List<ETFPosiation> etfPosiationList);

    /**
     * 更新ETF持仓数据
     * @param etfPosiation ETF持仓数据对象
     * @return 更新是否成功
     */
    boolean updateETFPosiation(ETFPosiation etfPosiation);

    /**
     * 根据基金代码删除持仓数据
     * @param fundCode 基金代码
     * @return 删除是否成功
     */
    boolean deleteETFPosiationByFundCode(String fundCode);

    /**
     * 根据基金代码、年份和季度删除持仓数据
     * @param fundCode 基金代码
     * @param reportYear 报告年份
     * @param reportQuarter 报告季度
     * @return 删除是否成功
     */
    boolean deleteETFPosiationByFundCodeAndReportPeriod(String fundCode, Integer reportYear, Integer reportQuarter);

    /**
     * 清空ETF持仓表
     * @return 操作是否成功
     */
    boolean clearETFPosiation();
}